package com.solcoo.merchant.base.task;

import java.util.Collection;
import java.util.Map;

import android.content.Context;

import com.solcoo.common.util.CollectionUtil;
import com.solcoo.common.util.StringUtil;
import com.solcoo.merchant.ApplicationExt;
import com.solcoo.merchant.base.BaseListAdapter.IResultWrapper;
import com.solcoo.merchant.base.i.BaseViewWrapper;

/**
 * <pre>
 * 继承自BindContextAsyncTask 用于一个页面初始化任务。
 * 除拥有BindContextAsyncTask全部功能外。
 * 1.增加当返回空数据（onNullData）时，执行showNotData方法。
 * 2.且在返回时判断当前用户任务发起用户是否一致（uid是否相等）
 * 
 * 空数据定义：
 * 为null本身，或Collection的size为0，或实现IResultWrapper接口中的isEmpty方法
 * 
 * PS:该类的子类不能为 Void 类型
 * 
 * </pre>
 * 
 * @author panjunlin
 * 
 * @version 创建时间：2012-12-15 上午11:40:12
 * 
 */
public abstract class LoadViewAsyncTask<Params, Progress, Result> extends
		BindContextAsyncTask<Params, Progress, Result> {

	public LoadViewAsyncTask(Context context) {
		super(context);
	}

	protected final void onFinishExecute(Result result) {
		if (!StringUtil.equals(activityName, ApplicationExt.getInstance()
				.getCurrentContextName())) {
			return;
		}
		// User curUser = ApplicationExt.getUser();
		// if (curUser == null || curUser.userId != user.userId) {
		// return;
		// }
		if (mContext instanceof BaseViewWrapper) {
			BaseViewWrapper activity = (BaseViewWrapper) mContext;
			activity.dismissNotData();
		}
		// 兼容目前5种为空的数据类型
		if (result == null
				|| (result instanceof Map && CollectionUtil
						.isEmpty((Map) result))
				|| (result instanceof Collection && CollectionUtil
						.isEmpty((Collection<?>) result))
				|| (result instanceof IResultWrapper && ((IResultWrapper) result)
						.isEmpty())) {
			onNullData();
		} else {
			onPostExecute(result);
		}
		if (mContext instanceof BaseViewWrapper) {
			BaseViewWrapper activity = (BaseViewWrapper) mContext;
			activity.dismissProgressDialog();
		}
	}

	protected void onPostExecute(Result result) {
	}

	@Override
	protected void onCancelled() {
		onNullData();
		super.onCancelled();
	}

	protected void onNullData() {
		if (mContext instanceof BaseViewWrapper) {
			BaseViewWrapper activity = (BaseViewWrapper) mContext;
			activity.showNotData();
		}
	}

}
